EKSでクラスター作成後に他のIAMユーザーに自分と同じ管理者権限を与える
EKSクラスターを作成しました。この段階では作成者である自分のIAMエンティティのみがクラスターを操作できるsystem:masters
権限を持っています。system:masters
って何?という方は、以下で詳しくまとめられていますのでご確認ください。
先程「自分のIAMエンティティがsystem:masters
権限を持っている」と書きましたが、厳密には、すべての権限が付与されている cluster-admin
ロールがあり、そしてそのロールにバインディングされているsystem:masters
グループがあり、さらにそのグループのメンバーに自分のIAMエンティティが入っている、という感じでしょうか。
今回はこの権限を他のIAMユーザーにも付与してみたいと思います。eksctlを使います。
やることは大きくわけて 4つです。
- IAMユーザーを作成する
- 上記IAMユーザーに
system:masters
権限を与える - 上記ユーザーでcontextを作成する
- テスト: kubectlコマンドを使ってみる
ではやっていきましょう。
1. IAMユーザーを作成する
IAMユーザーを作成する(コンソール)
詳細は割愛し、以下ページをもとに説明します。
- IAM ユーザーの作成 (コンソール) | AWS Identity and Access Management ユーザーガイド
- 3のユーザー名指定は今回
new-admin-test
としました。 - 4のアクセス許可の種類は[Programmatic access (プログラムによるアクセス)]を選択してください。[AWS マネジメントコンソール のアクセス]についてはあってもなくても構いません。ご用件に合わせてどうぞ。
- 6のアクセス許可の設定ですが、[Attach existing policies to user directly (既存のポリシーをユーザーに直接アタッチ)]を選び、
AdministratorAccess
を検索して選択しました。(もっと弱い権限で良いはずですが一旦こちらで進めます。) - 11で表示されるAccess Key IDとSecret Access Keyを控えておきます。
- 3のユーザー名指定は今回
プロファイルの設定
$ aws configure --profile new-admin-test
上記コマンドを実行すると以下4つを聞かれます。
- AWS Access Key ID
- AWS Secret Access Key
- Default region name
- Default output format
AWS Access Key IDとAWS Secret Access Keyは先程控えたものを入力してください。
Default region nameは対象のEKSクラスターがあるリージョンで良いでしょう。東京リージョンの場合 ap-northeast-1
です。
Default output formatは任意です。こちらを参考にお好きなものをどうぞ。何も指定しなければデフォルトでjsonになります。
ここまでの確認
$ aws sts get-caller-identity --profile new-admin-test { "UserId": "xxxxxxxxxxxxx", "Account": "123456789012", "Arn": "arn:aws:iam::123456789012:user/new-admin-test" }
2. 上記IAMユーザーにsystem:masters
権限を与える
eksctl
を使います。
まず現状を確認します。
$ eksctl get iamidentitymapping \ --cluster (cluster名) ARN USERNAME GROUPS arn:aws:iam::123456789012:role/yyyy-node-NodeInstanceRole-zzzz system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes
設定します。
$ eksctl create iamidentitymapping \ --cluster (cluster名) \ --arn arn:aws:iam::123456789012:user/new-admin-test \ --username new-admin-test \ --group system:masters [ℹ] eksctl version 0.31.0 [ℹ] using region ap-northeast-1 [ℹ] adding identity "arn:aws:iam::123456789012:user/new-admin-test" to auth ConfigMap
--arn
値は権限付与したいIAMのARNです。IAMのコンソールでそのIAMユーザーの詳細画面にいけばARNをコピペできます。
設定できたか確認します。
$ eksctl get iamidentitymapping \ --cluster (cluster名) ARN USERNAME GROUPS arn:aws:iam::123456789012:role/yyyy-node-NodeInstanceRole-zzzz system:node:{{EC2PrivateDNSName}} system:bootstrappers,system:nodes arn:aws:iam::123456789012:user/new-admin-test new-admin-test system:masters
3. 上記ユーザーでcontextを作成する
$ aws eks --region ap-northeast-1 update-kubeconfig --name (cluster名) --profile new-admin-test
上記コマンドだけで対象クラスターへnew-admin-testで接続するためのcontext、またそれに紐づくuser、clusterが ~/.kube/config
に追記されます。便利!
4. テスト: kubectlコマンドを使ってみる
すでに上記で作成されたcontextにスイッチした状態になっていますので、あとは
$ kubectl get all --all-namespaces
など任意のkubectlコマンドを打って確認してください。